package com.weixiaodong.ModelDesign.生成实例.Singleton模式.枚举方式;

/**
 * 推荐使用枚举的方式实现单例，因为枚举不会被序列化破坏，但是反射还是有可能的
 */
@SuppressWarnings("all")
public class SingletonC {

    private SingletonC() {}; // 私有化构造方法，不对外暴露

    private enum SingletonCEnum {
        SEED; // 通过这个枚举实现对象的创建

        // 在这个枚举中，会初始化单例对象，并提供一个枚举使用的接口返回单例

        private SingletonC singletonC;

        SingletonCEnum() {
            singletonC = new SingletonC();
        }


        private SingletonC getInstance() {
            return singletonC;
        }
    }


    public static SingletonC getInstance() { // 提供一个对外暴露的接口，让使用者创建单例对象
        return SingletonCEnum.SEED.getInstance();
    }

    public static void main(String[] args) {
        SingletonC instance1 = SingletonC.getInstance();
        SingletonC instance2 = SingletonC.getInstance();
        System.out.println(instance1 == instance2); // true
    }
}
